ML }  X c0C)HCCH Mhhݩh `eCDiCD`  RyHP   * 1H0芢@) Y0.Ș` i #(PMR\ \b Pgi 0  % @ / ՠ`d   0DDԝLM:  =FFTTXY !!*** SIMPLE X-Y MATCHING *** +@}@(h(ENTER COORDS X,Y( @@.X )!AY) )!@y^(h @@2 ,}<f(ENTER COORDS X,Y& @P,V )!AY) )!@y\(f @PF ,P6-N:&,}Z6-N:&,d(*(A@n 6-%x 6-% , @(VECTOR COMPLETED2:XYMATCH.BAS,zmFFTTXYDELTADELTAXY  }""*** TRUE VECTOR METHOD 1 *** +@@(h(ENTER COORDS X,Y( @@.X )!AY }) )!@y^(h @@2 ,<f(ENTER COORDS X,Y& @P,V )!AY) ) }!@y\(f @PF ,P6-N:&,Z6-N:&,d6-O:&,n6-O:&,x?!@)!@'6-'@ }56-'@? A  6-$ 6-$11P:%?P,"P:,*P:%?P,"P:,A 6-% 6-%  } , AP(VECTOR COMPLETED2:VECTOR1.BAS,"P:,*P:%?P,"P:,A 6-% 6-% C+,FFTTXYDELTADELTAXACYACCOUNEPOIN} ""*** TRUE VECTOR METHOD 2 *** +@@(h(ENTER COORDS X,Y( }@@.X )!AY) )!@y^(h @@2 ,<f(ENTER COORDS X,Y& @P,V} )!AY) )!@y\(f @PF ,P6-N:&,Z6-N:&,d6-O:&,n6-O:&,x}6-6- 6-!6- 6-! "6-'@! A6-'@"A}` 6-% 6-&6-% 6-% 6-&6-% ,6-&@ A(VE}CTOR COMPLETED2:VECTOR2.BAS 6-% 6-&6-% ,6-&@ A(VE'N@  )?HI Y0`HIJH) * J j * hJJJ )HJ h i      } YS S0 i`΢ϣ߳H J3xj2h } 1 |9 ӭ45(420 * (0241өX.`  R *i)Lvw  ~*P }E 5 LN(G E  r s k rsrL ( E LO(0d( L iE0O +)$IC  H S8  }q p h   j 8no CDLQ CFl M  LO Ri)Llk2'")*F }$F$F$F$F$ 5 )ШF/Șl]kpqС,LQ/A! Ti)Zlk@ ܬ/i)(")")k }$F$F$F 5$/L /lF@jj(LNkle$$%8(k()` R 8 ELO Ri)^>jf | NrC s } ) vw5g   enfo Glvw LQ@iLm>j FL ~Jjjjii p qEh }jlrs`LQ:$ȱ$@+[_#{ 8  Խut! ai 8   E I   ] C } H h    ˰ 8  N   Lm E  ,  [ `LQ ,/ 8 ~/  Ơ? ѩ }/  [ /Lj0?MoLn FjMqLp NklLOLQnLoMlNLO R"(+ }ըHH`Q R!!  % !   / .   FȑF! /GF \H"+0+* !}! F tLQnm: J~nTF1F  *n+)5! n (, n)1JJJn(n*o "} I ,0  ci a oF? @ , 8,0 ʩ0H Eh   i #}  D ]DmmFLQvtu`*&!*@h ] 0 ^0` c 0l$$% $}()()%*&J%H,@hH hH@,h $% 8i8$(%)0hhH ]h`() c 0H c 0 h %}`hhh&JJ ](ll  LQ0  /qnoHH 9 9 H H  I9  9 &} Nd EH  Q8 o n  FnoL HII/ Ih8`h`Lnon`no`u F '}E VEhLO/luF l0BF/lɜɛ׽hE N  b VFL FREE SECTORS C (} H) *Fh ):FȽ F FC IH' 0 d  i:Fȩ/F.l`CD/08HDIC )}IHȰ/F`ȱ$>.+.i ȱ$:刄H !A \ Hȱ$*?ȝ 2. ? [_{ ,0 *}-:) 0$:>WI  IТ,LQH  0hLd ~ t u`C ?( 0(C.` E +} R =! .ti S0N EE D XC )0')AY  )ע ? 0E088FG \o ,}n  (HhLcL3 iJ i Lqp 0=rspnqopqlk`jZj0  j FL`H -}FhȑFȽlFi0 h FFLFpvqwgneofLF pq7  G0i 0 FJJh1FqȱFpȱFk`B! .}08`hEE D 8. =D}tui( TʩL`b!)    cȌaȌd b`aab /}H8 hdaHcd8 cH hHH  \h hc` =Hh I8ih( t  ( t(!` L\ 0}CJfCJfCJfCDfC` a  HII  INdh  `h  `n)8jHniPoijIjFIjFIjh` a 1} I 38  8H0 I  ' H LQ8j Y  8j NdY  &I &I &IHeH.p 2}Iiq  `!.莿 2Jjj }.m Ȉ!m FG` ɩLQ z  3} e Hi04 \ Ȍ  8 i h !`I0 `C Y8.`DOS SYS 4} I  ` ~ݩ.C/`ba.m۩mѤC9 `C L] H  ,- '0 l 5}, BLVDE`D1:AUTORUN.SYS8hhJ ȱHȱIȱBȱDȱEeeHHLV)   6}1*  ,,p-  0 I &  '0   Lw)l, 0  I&LD1:MEM.SAV 7}E:D1:DUP.SYS!‚F("r)A"@$.(Y%,`#-0RH%s` 8} D  C D     )16CS S)  C)D1 p p  9}0 C9DI pCDL~CiCDiD` DD˙` d J)L ! :}D L(( LL()  L| L( S LH 0p n   ;} CY?  q  L L  ` ) <} `A! d߰")-݆ "  $G@LLL&0") $G% =}H0 3S8`G ȱG ȱG   Gȭ Gȭ GG}GHiH8(()) G$H% `(0 >})8` d)L ݆ & LGȘ ݆LL d  ! LL d)N>Q  HH) ?}  hyhyB q L> Lm JJ  Ln*` dB%' @}8  H H` 1 { LL   !L     Hh SY?  q  1L A}  !? S   q 1 L   Ll  Lg E`L   !L)  q 1L B}) `L0AM݊L݉ ML  N݆LLLNLMLHG!@ C}1F GȱGLLEEȩÑEȑEEȑE Ed E7EȩE  q D} L !,0,0SGɛ L 1 !L EHEh W G gLLSROTCES EERF E} G) *Gȩ GȽG GȌd q q G`  8   0G  `D F}CEDC0X:Ȣ Y ȱC* ? 0.. , 0%n ?A[ 0 : L`L  `, 0`Y G}`piH n0)բY? 08`0  H}  0$L GGȽG L `8L`L I}8`  05G)݁,G)ȱGȱGHh0})Hh` B! 8`8iiiLE` J}E8FEh( l0`ɃLL L8^~jj8jHi hEEEiEȱEiE` dTE K} H8EEȱEEȩEh J E8   . m  i`LI!)E1FR L}1LJ舩9GIH`LJJ`HGHh l` M} S gL   8 rii `дCDCG W  N}C  Lq` X٨`DOS SYS IIIIIIIIIIIIIIIC`0 ߩ0}} O} HE |||||DOS DOSDOS SYS } P}}} Q}CDOS SYS R} 0`BDELV !B S}`LVUQ   ]   TU J ]L!T  #      TU  T} L ? .  t`GBJ V~DEHI B V0dV U}QDEHI VF9 ,0 ,0 s0hhL  L` H hDHEh V}DEL8HI   0 HI,0 0  9 .G VLO W},0 L4*IJ`llD1:AUTORUN.SYSNEED MEM.SAV TO LOAD THIS FILE.D1:MEM.SAV J y08 B|DEHI X} V0 0`B;DELV䌚 !B y`@ʆ v s? F0Ξ05: [ BDEHI Y} VY8 B V  @  /DE `E:D1:DUP.SYSERROR-SAVING USER MEMORY ON DISKTYPE Y TO Z}STILL RUN DOS B;DE J V (` 9 V⪍ ઍ  - [}LLu DEHILV 9 .l 9 .l  `` s$B VBH \}I|DE V BLV nB,DE J V* \*` B V BLVDEHI BLVL ]}1u H232435; 1 ;  hh@2 e1i1LHҍ 00) 08 109hh@ Ҡ2e ^}1i1232435ޥ<<8 }z(>XSYSFFTTSTIXY@@ `} %%*** FOLLOWER (X-Y MATCHING) *** +@@(K9@,9@,/-@@5a}">68,-G68,-K 2GG0,0,0,0,0,0,0,0,1,1,1,-1,1,0,0,0,-1,1,-1,-1,-1,0,0,0,0,1,0,-1,0,0<6-6-b}F6-@6-@@P6-R:,Z6-%8,d6-%8,n ,x6-N:&,6-N:&,(*(Ac} 6-% 6-% , @(GOTCHA!D2:FOLLOW1.BAS-N:&,6-N:&,(*(AX)*XSYSFFTTSTIXYDELTADELTAXY@@e}  !!*** FOLLOWER (VECTOR 1) *** +@@(Kf}9@,9@,/-@@5">68,-G68,-K 2GG0,0,0,0,0,0,0,0,1,1,1,-1,1,0,0,0,-1,1,-1,-1,-1,0,g}0,0,0,1,0,-1,0,0<6-6-F6-@6-@@P6-R:,Z6-%8,d6-%8,n ,h}x6-N:&,6-N:&,6-O:&,6-O:&,?!@)!@'6-'@56-'@? A` 6i}-$ 6-$!!P:,"P:,*P:,"P:,A@ 6-% 6-% , @(GOTCHA!D2:FOLj}LOW2.BAS 6-$!!P:,"P:,*P:,"P:,A@ 6-% 6-% , @(GOTCHA!D2:FOL 89dzXSYSFFTTSTIXYDELTADELTAXACYACCOUNEPOIN@@l}  !!*** FOLLOWER (VECTOR 2) ***m} +@@(K9@,9@,/-@@5">68,-G68,-K 2GG0,0,0,0,0,0,0,0,1,n}1,1,-1,1,0,0,0,-1,1,-1,-1,-1,0,0,0,0,1,0,-1,0,0<6-6-F6-@6-@@P6-R:,Z6o}-%8,d6-%8,n ,x6-N:&,6-N:&,6-O:&,6-O:&,6-6- 6-p}!6- 6-! "6-'@! A 6-'@"A 6-% 6-&q}6-% 6-% 6-&6-% ,6-&@" R:,"@A , @6(GOTCr}HA!D2:FOLLOW3.BAS-&6-% ,6-&@" R:,"@A , @6(GOTC12-@DSDATHEXLINDATLIDDBYTPASCHKSUTOTAIN@t} *** HBUG ***990,1,2,3,4,5,6,7,8,9,0,0,0,0,0,0,0,10,11,12,13,14,15u}r;@,9@",/-@"3"<68,-@ L6-A V#A` Ar( CHECKING DATA(86-%v}@(LINE:!"8B:,@A`2F%6-F:A,%F:A,$AV+C(LINE  MISSING!F<q-@w}@@56-@:7<,,&@H[6-@:7%@<%@,,&@Hq6-8,$@%8,F."@*@x} $". @@P% 6-%!A %6-&AZ  ""@@d A`n F:A,@y}A`x"@"*@A$5*@@H*@A%[*@@n*@*@z}@2@["(INSERT DISK, PRESS RETURN/;@,3[@@ D:HBUG.COMu*@{}AU)*@AU<*@O*@@2b*@AYu*@@7M(( WRITING|} FILE#6-@/6-A 9#AC AM @@(BAD DATA: LINE ccA9008D0ED48D8325BA8E7925AD06028D}}1326AD07028D1426A9248D0702A9478D0602A224A07DA907205CE4A940,79dd8D0ED420B82320132420EF23A200A9878D4403A9258D4503A9058D4203~}A97F8D48038E49032056E430E2A200BD,272cc8725C99BF003E810F6E000F0CC8E8225A200BD8725C920D0148AA8B98825998725C8CC8225D0F4CE822}54C6C20,99ddE8EC8225D0DFAD8225D0034C3320A9008D7E25AC7E25B9D4248D7F25BED324A000B98725DDC824D01BC8E8EC7F,862dd25D0F1AD7}E250AAABDDA248D8025BDDB248D81256C8025EE7E25AD7E25C907D0C520F6234C3320B98725C99BF0,412dd034CD520A2E4A062A907205CE4AD13268D}0602AD14268D07026C0A00086829EF482820B823AD7A25203024AD7D,291$dd258D0025AD7C258DFF24AD7B25203024AD7D258DFE24AD7C258DFD24205}121201324A2FDA0242017244C3320B9,530.dd8725C99BF0034CD520205121A205A0252017244C3320A000B97525203024BE6025AD7C259D0525AD7D25}9D0625,3888ddC8C005D0E660A204BD75259D0726CA10F7A200A9008D0D268D0C26B98725C99BF00AC92CF00620BD214C8321AD,330Bdd0C26F006A}D0D269D0726B98725C99BD00EA204BD07269D7525CA10F74C3320E8C8E005D0C14CD5208E8525A20F,194LddDD6525F006CA10F84CEF210E0D260E0D26}0E0D260E0D268A0D0D268D0D26EE0C26AD0C26C903B005AE8525C860,803Vdd68684CD520B98725C99BD01DA5D418690885D4A5D5690085D5A9008D112}6A9078D10264C50224CD520206123AE,555`dd1226F0F5AE0E2686D4AE0F2686D5C99BF0DAC92CD0E3C8206123AE1226F0DAC99BD0D6AD0E2638E5D48D}1026AD,656jdd0F26E5D58D1126A920A22C9D3225CA10FAA91BA20E9D4F25CACA10F9A5D4203024AD7D258D3525AD7C258D3425,403tddA5D520302}4AD7D258D3325AD7C258D3225A000B1D4C99BF006BE2A259D4F25203024BE2225AD7D259D3825AD7C,975~dd259D3725C8AD102638E9018D1026AD1126}E9008D11261006200C244C3320C008D0C4200C2410034C3320A5D418,354dd690885D4A5D5690085D54C5022B98725C93CF016206123AE1226F04BC93}CD047AE0E2686D4AE0F2686D5C8A200,468ddA9008D0D268D0C26B98725C99BF00AC92CF00620BD214C0523AD0C26F00D8C86258AA8AD0D2691D4AC86}25B987,181dd25C99BD0034C3320E8C84CFD224CD520206123C99BD01DAD1226F018AE79259AAD782548AE7625AC7725AD7525,182ddEE8325286}C0E264CD520A9008D0E268D0F268D1226B98725C99BF008C92CF004C93CD00160A20FDD6525F008CA,864dd10F868684CD5200E0E262E0F260E0E262E}0F260E0E262E0F260E0E262E0F268A0D0E268D0E26EE1226AD1226C9,437dd05B0D2C84C6C23D820D923A200A9E68D4403A9248D4503A9038D4203A90}C8D4A038E4B032056E460A2078E8425,861ddA90C9D42032056E4CE8425AE842510F060A2EAA0244C1724A980198725998725A2EFA024201724A287A0}254C17,511dd24A232A0254C1724A2E9A0248E44038C4503A200A9098D4203A97F8D48038E49032056E46048290FAABD65258D,595dd7D25684A4}A4A4AAABD65258D7C2560AD8325D0026840D8A9008D83258E76258C7725688D7525688D78256838E9,252dd028D7A2568E9008D7B258E8525BA8E7925}AE8525584CFD20AD8325F043A511D03FA9808511A9008D8325BABD01,185dd018D7725BD02018D7625BD03018D7525BD04018D7825BD05018D7A25BD0}6018D7B258A1869068D7925A9209D06,879dd01A9FD9D05014C62E4444F53445243523C44434700030508090A0BDB203A216E21F421DD223A23453A9B}9B4842,393dd55479BFD494E505554204552524F52219B202020202020202020202020413D202020583D202020593D20202050,148 dd3D2020205}33D20209B000306090C0F121501030507090B0D0F2020202020202020202020202020202020202020,456dd2020202020202020202020202020202020}20202020202020209B060B10151A3031323334353637383941424344,282dd45460000000000000000000000000000000000000000000000000000000}0000000000000000000000000000000,421 D2:HBUG.BAS4,282dd454600000000000000000000000000000000000000000000000000000007;dEIn xX;"X;-----------------------------"X;HUDSON'S DEBUG PROGRAM (HBUG)"X;----------------------------- }X;DOSVEC ;;DOS run addressBRKKEY;;BREAK key statusSTACK;;hardware stackVBREAK;;BRK inst vector }RUNAD;;prog run addrICCOMB;;CIO command"ICBADRD;;CIO buffer address!ICBLENH;;CIO buffer length }ICAUX1J;;CIO aux. byte 1ICAUX2K;;CIO aux. byte 2NMIEN;;interrupt enableCIOVV;;CIO entry point"SET }VBV\;;VBLANK setup,XITVBVb;;VBLANK exit6X;@X;Page zero usageJX;TCML;;my two-byte^CMH;;address work } areahX;rX;-------------------|X;Program entry pointX;-------------------X;HBUGQ>;;turn off...PNMIEN };;interruptsPEXEC;;and execute flag@;;get stack pointer&USERS;;put in user areaQVBREAK;;save old BRKPBRKSV }L;;vector in myQVBREAK;;work areaPBRKSVH;;for laterQ>5BRKHAN;;now point toPVBREAK;;my BRK inst.Q>4B }RKHAN;;routine PVBREAK&$>5VBI;;set up0%>4VBI;;vertical:Q>;;blankD SETVBV;;interruptNQ>@;;turn on theXPN }MIEN;;VBLANK interruptb NEWSCR;;open GR.0 screenl!INPUT PRTCR;;carriage returnv PROMPT;;print HBUG prompt INPT2$> }Q>4MYBUFF;;point toPICBADR;;my inputQ>5MYBUFF;;bufferPICBADRQ>;;GET RECORD command PICCOMQ> };;my buffer'sPICBLEN;;length&ICBLEN CIOV;;get input!GINPT2;;go back if errorX;$X;This section 'squish }es' all the "X;spaces out of the input line.X; $>;;first find end*FINDBEQMYBUFF9;;of line4 R>;;CR?>FGOTEND; };yes!H2;;no, next char.RIFINDBE;;keep looking!\GOTEND(>;;CR first char?fFINPUT;;yes, try again.p&ENDPTR;;save } end indexz$>;;start w/1st char&SQUISHQMYBUFF9;;get the characterR> ;;space?HNOSQSH;;no!A;;move index?; };to Y register!SQSHLPQMYBUFF8;;shift allPMYBUFF8;;characters3;;back to remove)ENDPTR;;the space. HSQSHLP }"ENDPTR;;line 1 shorter!SQUISH;;keep squishing!NOSQSH2;;next char(ENDPTR;;end?HSQUISH;;no, keep going!! }QENDPTR;;was line all spaces?$HGETCMD;;no, get command.!INPUT;;get another input!8X;B"X;Now find command & process }itLX;VGETCMDQ>;;start with 1st`PCMDPTR;;command.j'CHKCMD%CMDPTR;;get command pointertQCMDST8;;get index of }~PCEND;;command text end$CMDST8;;and start.%>;;point to 1st char#CMDCMPQMYBUFF8;;is buffer charRCMDTXT9;; }= command char?HNOTCMD;;no!3;;yes, try next char2;;next command char(CEND;;end of command? HCMDCMP;;no, keep } comparing!QCMDPTR;;yes, mult commandT?;;index by 2 to point>;;into jump table!QCMDADR9;;get command routine P }CMDJMP;;address low byteQCMDADR9;;and high bytePCMDJMP;;and save.(!@CMDJMP:;;jump to routine!2$NOTCMD#CM }DPTR;;try next command<QCMDPTR;;get pointerFR>;;more commands?PHCHKCMD;;yes!Z&GOTERR ERRMSG;;oops! bad command!d }!INPUT;;get another inputnX;x!X;This section handles the DOS$X;command. It shuts off the HBUG$X;VBLANK and BRK vec }tors and JMPs X;to DOS.X;!GODOSQMYBUFF8;;get next char R>;;CR?FDOSOK;;yes, go to DOS!!GOTERR;;no, invalid } command!!DOSOK$>5XITVBV;;point VBLANK%>4XITVBV;;back to theQ>;;system exit SETVBV;;point.QBRKSVL;;resto }re oldPVBREAK;;systemQBRKSVH;;BRK vector fromPVBREAK;;save area"!@DOSVEC:;;go to DOS!,X;6!X;Show regs af }ter BREAK key or@X;BRK instruction.JX;TSHOBRK6;;get processor^7;;status in A,hM>;;turn off BRK flagr5;;and put } back in|8;;status register! NEWSCR;;re-open screen!QUSRPCL;;get prog counter low BINHEX;;convert to hexQHEX }2;;get low digitPBRK4;;put in lineQHEX1;;get high digitPBRK3;;put in line, tooQUSRPCH;;get PC high BINHEX };;convert to hexQHEX2;;put low digitPBRK2;;in lineQHEX1;;and high digitPBRK1;;in line. SETREG;;set rest o }f line PRTCR;;carriage return$>4BRKTXT;;point to&%>5BRKTXT;;BREAK text0 PRINT;;print it:!INPUT;;and get inpu }tDX;NX;Display registers (DR)XX;b!SHOREGQMYBUFF8;;is next charlR>;;a CR?vFDROKAY;;yes, it's OK!!GOTERR;;o }therwise ERROR!DROKAY SETREG;;get registers$>4DRTXT;;point to the%>5DRTXT;;DR text PRINT;;print it!INPUT; };and get inputX;X;Set up register disp areaX;#SETREG%>;;start w/user byte 0SETLPQUSER8;;get data BINHE }X;;convert to hex$DRPTR8;;get its positionQHEX1;;get first digit PDRTXT9;;put in lineQHEX2;;get second digit  }PDRTXT9;;put in line*3;;next byte4)>;;done 5?>HSETLP;;not yet!H:;;all done!RX;\X;Change registers (CR)f }X;pCHGREG$>;;first copy userzINITMPQUSER9;;registersPTMPUSR9;;to temporary0;;hold area IINITMP$>;;1st } user byteCRSTRTQ>;;zero out...PBHOLD;;byte holdPHDIG;;and digit count#CRLOOKQMYBUFF8;;get input char R> };;CR?FSTOTRY;;yes, all done.R>,;;comma?FSTOTRY;;yes, try store! CTOBIN;;convert it to binary !CRLOOK;;and }do next one STOTRYQHDIG;;any digits? FNXTCCK;;no, skip it!$ QBHOLD;;yes, save the byte. PTMPUSR9;;in temporary tab }le8 NXTCCKQMYBUFF8;;was thisB R>;;a CR?L HNXTCHR;;no, keep going.V $>;;otherwise,` SETUSRQTMPUSR9;;copy thej P }USER9;;temporary tablet 0;;back to the~ ISETUSR;;user registers !INPUT;;get another line NXTCHR2;;next user registe }r 3;;next character (>;;done 5 regs? HCRSTRT;;no, loop back. !GOTERR;;UH-OH! too many! X; X;Convert char. to }binary # X; "CTOBIN&XHOLD;;save X register $>;;set scan index "HDSCANRHEXDIG9;;compare ASCII FGOTHD;;got it! }0;;next char IHDSCAN;;scan all 16 !CBERR;;not in table!( !GOTHDTBHOLD;;shift current #2 TBHOLD;;left 4 times to<  }TBHOLD;;multiply it byF TBHOLD;;16P A;;get this digitZ LBHOLD;;and add it tod PBHOLD;;the hold area.n #HDIG;;one mo }re digitx QHDIG;;are there more R>;;than 2? ECBERR;;yes--too big! $XHOLD;;restore X reg 3;;next buffer char : };;and exit CBERR7;;remove return addr 7;;from stack !!GOTERR;;and do error routine X; X;Display memory contents  }X; $SHOMEMQMYBUFF8;;is character... R>;;a CR? HGETSAD;;no, get address. QCML;;get last address ,;;and add 8 to } it" O>;;since no address, PCML;;was specified6 QCMH@ O>J PCMHT SHOW8Q>;;show only 8^ PCOUNTH;;bytesh Q> }r PCOUNTL| !SHOWLN;;go show 'em! &SMERR!GOTERR;;jump to err routine $GETSAD GET4;;get 4-byte address $G4DIGS;;an }y digits found? FSMERR;;no! $ADL;;save address &CML;;in page zero $ADH;;work area &CMH R>;;CR after addres }s? FSHOW8;;yes, show 8 bytes. R>,;;comma? HSMERR;;no, bad command 3;;next char  GET4;;get end address $G4DIG }S;;got any digits? FSMERR;;no!& R>;;CR after end addr?0 HSMERR;;no!: QADL;;now subtractD ;;;end addressN SCML;;f }rom startX PCOUNTL;;to get numberb QADH;;of bytes tol SCMH;;display.v PCOUNTH SHOWLNQ> ;;clear out $>,;;displa }y line CLRMLPSHOM19 0 ICLRML Q>;;and set up ESC $>;;characters SETESCPASCII9;;in the ASCII 0;;display }area 0 ISETESC QCML;;convert the  BINHEX;;current address QHEX2;;to ascii hex PSHOM4;;characters QHEX1;;a }nd put in PSHOM3;;the memory* QCMH;;display line.4  BINHEX;;this is done> QHEX2;;2 times, forH PSHOM2;;the low and } highR QHEX1;;bytes of the\ PSHOM1;;addressf %>;;start showing!p BILDLNQ@CML7;;get mem bytez R>;;CR? FNO9B;;y }es, don't show it! $ASCPOS8;;put in ASCII PASCII9;;display area %NO9B BINHEX;;convert byte to hex $SMPOS8;;get po }sition QHEX2;;get low char PSMDATA9;;and store QHEX1;;get high char PSMDATA9;;and store. 3;;next byte QCO }UNTL;;now decrement ;;;the byte count S>;;by 1 PCOUNTL QCOUNTHS>$ PCOUNTH.IMORESM;;more? yes!8 PDATA };;no more, print lineB !INPUT;;and get next commandLMORESM)>;;done 8 bytes?VHBILDLN;;no, loop back` PDATA;;done }8, print 'emjINOSTOP;;no BREAK keyt!INPUT;;get next command~"NOSTOPQCML;;increment display,;;address by 8O> }PCMLQCMHO>PCMH!SHOWLN;;and loop back.X;$X;Change memory contents (Cnnnn<)X;CHGMEMQMYBUFF8;;g }et char R><;;'<'?!FCMDFLT;;yes, default address  GET4;;get the address$G4DIGS;;got any digits?FCMERR;;no!( }R><;;next char '<'?2HCMERR;;no!<$ADL;;save theF&CML;;change memoryP$ADH;;address onZ&CMH;;page zero.dCMDFL }T3;;next buffer charn$>;;1st memory bytexCMSTRTQ>;;zero out...PBHOLD;;byte holdPHDIG;;and digit countCML }OOKQMYBUFF8;;get char R>;;CR?FCMTRY;;yes, all done!R>,;;comma? FCMTRY;;yes, store last byte# CTOBIN;;conve }rt char to binary!CMLOOK;;and get nextCMTRYQHDIG;;any digits?FNEXTCM;;no! don't store'YHOLD;;save Y register }A;;move X... ?;;to YQBHOLD;;get byte to storeP@CML7;;and store it!"%YHOLD;;get Y back,"NEXTCMQMYBUFF8;;get } last char6R>;;was it CR?@HNXTLOC;;no, continueJ!INPUT;;all done!TNXTLOC2;;next mem byte^3;;next input charh }!CMSTRT;;loop back!r&CMERR!GOTERR;;go to error routine|X;X;Execute at address (Gnnnn)X;%EXECUT GET4;;get the }run addressR>;;is that all?HEXERR;;no!QG4DIGS;;got any digits?FEXERR;;no!$USERS;;put user stackB;;poi }nter in SQUSERP;;put user status5;;on stack$USERX;;set user X reg%USERY;;and user Y regQUSERA;;and accumul }ator#EXEC;;set execute flag8;;get status off stack&!@ADL:;;go to run address!0&EXERR!GOTERR;;go to error routine }:X;DX;Get 4-character addressNX;XGET4Q>;;zero out...bPADL;;address low bytelPADH;;address high bytevPG4DI }GS;;digit countG4LOOPQMYBUFF8;;get char R>;;CR?FG4END;;yes, all done!R>,;;comma?FG4END;;yes, all done! } R><;;'<'?HTESTIT;;no, check digitG4END:;;exit!%TESTIT$>;;set hex digit pointer%G4SCANRHEXDIG9;;is it this }char?FGOTG4D;;yes!0;;try next hex digitIG4SCAN;;loop if more.G4ERR7;;discard return 7;;address,!GOTERR;; }show error. GOTG4DTADL;;this code*UADH;;shifts the4TADL;;current address>UADH;;left 4 bitsHTADL;;in order toR }UADH;;multiply it\TADL;;by 16.fUADHpA;;get this digitzLADL;;and add it toPADL;;the address.#G4DIGS;;one } more digitQG4DIGS;;how many total?R>;;more than 4?EG4ERR;;yes! error!3;;ok, do next character!G4LOOP;;an }d loop back.X;!X;Set up new graphics 0 screenX; NEWSCR- NOIOCB;;close all IOCB'sX;X;now open screen!X };$>$Q>4EADR;;'E:' filename. PICBADR8 Q>5EADRBPICBADRLQ>;;OPEN commandV PICCOM` Q> ;;I/Oj PICAUX1t }&ICAUX2;;zero aux byte~ CIOV;;open it!:;;and return.X;X;Close all IOCB'sX;NOIOCB$>;;first close&S }AVEX;;all IOCB's.CLOOPQ> ;;CLOSE command PICCOM9 CIOV;;close it!"SAVEX;;next IOCB$SAVEX;;more IOCB's?I }CLOOP;;yes!:;;all done! X;X;Show HBUG promptX;(PROMPT$>4HMSG;;point to2%>5HMSG;;HBUG message<!PRINT;;an }d print it!FX;PX;Show error messageZX;dERRMSGQ>;;set high bitnLMYBUFF8;;inverse thexPMYBUFF8;;invalid charac }ter$>4ERRTXT;;point to%>5ERRTXT;;error message PRINT;;print it$>4MYBUFF;;point to%>5MYBUFF;;input buffer }!PRINT;;print it, too!X;X;Print memory display lineX;#PDATA$>4SHOM1;;point to memory%>5SHOM1;;display lin }e!PRINT;;print it!X;X;Print carriage return onlyX; PRTCR$>4CR;;point to CR and"%>5CR;;fall thru to print, }X;6X;General-use print routine@X;J%PRINT&ICBADR;;save print area loT'ICBADR;;and high^$>;;zero X reg.hQ> } ;;PUT RECORD commandr PICCOM|Q>;;set up...PICBLEN;;buffer length&ICBLEN CIOV;;print it!:;;and exit. }X;X;Binary-to-hex converterX;BINHEX5;;save byteM>;;get low 4 bits>;;put in indexQHEXDIG9;;lookup hex }PHEX2;;and save7;;get byte againV?;;shift rightV?;;4 times V?;;to get&V?;;high 4 bits0>;;put in index:Q }HEXDIG9;;lookup hexDPHEX1;;and saveN:;;all done!XX;bX;Handle 6502 BRK interruptlX;vBRKHANQEXEC;;executing?H }SAVREG;;yes!7;;no, restore accum.9;;and return from int.SAVREG-;;no decimal mode!Q>;;reset thePEXEC;;exec }uting flag&USERX;;save X'USERY;;and Y7PUSERA;;and accumulator7PUSERP;;and status reg.7;;;now get }program S>;;counter from stackPUSRPCL;;and subtract 2 7;;to get BREAK*S>;;address.4 PUSRPCH>&XHOLD;;save X } reg.H@;;now store stack pntrR&USERS;;in the user area.\$XHOLD;;restore Xf.;;clear interruptp !SHOBRK;;and show b }reak infozX;X;Handle BREAK key in VBIX;VBIQEXEC;;executing?FNOBKEY;;no!QBRKKEY;;BREAK pressed?HNOBKE }Y;;no!Q>;;reset BREAKPBRKKEY;;press flag Q>;;andPEXEC;;execute flag@;;get stack pntrQSTACK9;;get Y!} registerPUSERY;;and save itQSTACK9;;get X registerPUSERX;;and save itQSTACK9;;get accumulator$PUSER!}A;;and save it.#QSTACK9;;get status register8PUSERP;;and save itBQSTACK9;;get programLPUSRPCL;;counterVQS!}TACK9;;and`PUSRPCH;;store it!jA;;move stack pntrt,;;to A, add 6 to~O>;;get true valuePUSERS;;and save it!!}Q>5SHOBRK;;change returnPSTACK9;;address toQ>4SHOBRK;;go to SHOBRKPSTACK9;;after VBLANK.NOBKEY!XITVB!}V;;all done!X;X;Data areasX;X;Command text & pointersX;CMDTXT ADOSDRCR?@AB * MUNCH'IN CLIMB%}'IN* by Mark Comeau* ANALOG Computing #17(8 A@#;,9,9,;,+-468,-8 2-$;A,%};,;,;,9,-6-C:,</ #A@-A"+67,.>:,/ F -"67,.>:, P -"6%}7,.>:, Z -"67,.>:, d -"67,.>:, n@6-P:+F:AE,%,',$)BBy76-$A%}V@6-C:,xNAY@F!B2w*6-C:,36-C:,96-EAN6-C:,N+AVF:A,%0%}AY@F<@wNA@S 6-%"A6-A 6-%"6-%6-1 "%}6-6-6-'6-A1 Ap @h,/% AOOA AAAPA %}AAAA6-6-.2AU&@2 6 36-A6-@%@2+%}6-36-& 6-R:,]-6-%+"* A,$&+"*!@H,$?6-+&@H,'K6-+&,'S1]1% "% }6- "6-9"@36-%+"* @,$&+"*!,$96-"@2)"6-%"A,%!}I2A2#,+6-%1"96-%?6-I A066-?:<<<<<<,@@ 6-&-( (%"}A."66-&@ A@J A0T/6-F:A`,'6-?:<<<<<<,/-^W -B2V+6-P:H%#}:,$@0,7AEA`%O2S W h#B2V2# A0r 6-!8, A| %$}T:,"6- A00B2V06-?:<<<<AP<@P<,# 2+#AY@F! -2AU%%}&! #( ȧΠ§#-(m c(u l(n %&} i(c m(h b!(!( BY ˠ= -( %'}Ӡ$-+(16-=AbAP:H:,$AU,7A P:H:,$AU,@T:,"LAXB2%(}Vb A0 A6-A6-@i7 @f,/,%/+/1,7/ ,/%)}&1 ,/,/%/+,1/0 ,/: @,/D$N!6-A6-!6-@y%*}X @,/b1 @f,/,%/+,1/l- ,/,/!,'/-/v%+}+ ,/,/%,+/- ,/,/!,'/-,! ,/,/!/' ,%,}/,/!,'/$6-AP6-@% @,/,%/7 @f,/%-},%/+,1/7,3 /,/,!/',-/3,1 / ,/,%/+,%.}1/3 ,/,/!,'/-,3/$!6-A6-A5!6- @,/%/}1 @f,/,%/+,1/ + ,/,/%,+/> ,/6- -6.6%0}-%?P4,:/>  / 6--6-%?P%,+// *$46-AP6-@>% @,%1}/,%/H1 @f,/,%/+,1/R' ,/,/!,'/\1 ,/%2},/%,+/1,f' /,,/!,'/p$z 6-6-% -2 ; @%3},/,%//@f5,;/D ,/!A ,-A 66 A: D A @%4}-A  A 8!@d -@d6* A. 8 A `-@d A +-A%5}UA'2+ "-AU62" @ -22*-6<2@(&%6}@   6-' A06-?:<<<<<<,$6-A P6-@7 @f,/,%/+,%7}1/7,- /,/,!/',-/1 ,/,/%,+/1,3 /,/%8},!,'/-,3/$' ,/,/!,'/.' ,/,/!,'/8% @%9},/,%/B$L6-A6-AV; @,/,%//@f5,;/`3 ,%:}/,/!,'/-,3/j3 ,/,/!,'/-,3/t ,/~+ ,/%;},/%,+/3 ,/,/!,'/-/3,3 /,/,!/',-/3,%<}- /,/,!/',-/$! 6-6-A!6-@y1 @,/,%/+%=},1/% @f,/,%/! ,/,,!,1 ,/,/%,+/1%>},3 /,/,!,',-,3/3 ,/,/!,'/-,3/$A%?}B2V+ Y 06-6-@e)ARD( MUNCH'IN CLIMB'IN Y( top ten.AY@F%@}-.!8,A  ( -68,-8, 2& -68%,-8, &68,-<; --%(%A}8,! )-%;( YOUR SCOREF0-AU6-(2%, 0 P -2 ZT:,"A%B}d Apn T:,"$x% -!2AP&+$,% 4 -(-A" .B2H4-,(%C} -)( ,$* INITIALIZATION5 +@-@@5(@STAND BY9 #A %D}9"<;@8,#A0(-@8,"867,.>:,< YAF:A%E},&+96-+F:A,%,$AVMAV'AVYAR6-?:C:,,#A -""6#A *AY%F}@4-$ -"%%  A##264,0,12,18,57,124,124,124,56 272,255,24,36,66,255,0,0,0%G}!!288,28,38,58,2,62,28,34,238##296,0,12,18,57,124,124,124,56%%304,14,17,60,126,126,126,126,60"##312,126,66,36,66%H},66,66,66,126,$$320,16,16,56,56,124,124,124,566 328,0,0,90,60,90,126,36,24@''336,129,189,126,219,255,189,66,60J""%I}344,32,50,24,12,22,19,56,124T%%352,129,90,60,126,126,60,90,129^&&280,66,255,66,66,66,255,66,66,-1hff216,104,104,104%J},133,213,104,24,105,2,133,206,104,133,205,104,133,204,104,133,203,104,104,133,208rff104,104,133,209,104,104,24,101,209,133%K},207,166,213,240,16,165,205,24,105,128,133,205,165,206,105|aa0,133,206,202,208,240,160,0,162,0,196,209,144,19,196,207,176,%L}15,132,212,138,168,177,203,164``212,145,205,232,169,0,240,4,169,0,145,205,200,192,128,208,224,166,213,165,208,157,0,208,9%M}6 56,100,92,64,124,56,68,11928,38,58,2,62,28,34,23824,60,60,60,24,36,102,05528,28,38,38,58,58,2,2,62,62,%N}28,28,34,34,238,238::0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20LL104,169,0,133,203,133,205,169,224,133,206,%O}165,106,24,105,1,133,204,160NN0,177,205,145,203,200,208,249,230,204,230,206,165,206,201,228,208,237,96D2:MUNCHIN.%P}BAS106,24,105,1,133,204,160NN0,177,205,145,203,200,208,249,230,204,230,206,165,206,201,228,208,237,96D2:MUNCHIN.$; KAL.ACT; Copyright 1984 BY Clinton Parker; All Rights Reserved; last modified February 18, 1984TYPE REC=[CAR)R}D cnt,ax,bx,cx,ay,by,cy]REC p, e CARD period, npts, persistenceCARD ARRAY line(192)BYTE ARRAY div8(320)BYTE ARRAY m1(0))S}=[128 64 32 16 8 4 2 1]BYTE ARRAY m2(0)=[$7F $BF $DF $EF $F7 $FB $FD $FE]PROC Plot(CARD x, BYTE y) BYTE POINTER pos; g)T}et address of byte to modify pos = line(y) + div8(x); modify only one bit of that byte IF color#0 THEN ; plot pos^ )U}==% m1(x & 7) ELSE ; erase pos^ ==& m2(x & 7) FIRETURNPROC Init() CARD i, scrstart=88 BYTE POINTER lineloc )V} Graphics(24) SetColor(1,0,14):SetColor(2,0,0); get starting address of each line on; graphics 24 screen lineloc = sc)W}rstart FOR i = 0 TO 191 DO line(i) = lineloc lineloc ==+ 40 OD; pre-calculate small values divided; by eight)X} FOR i = 0 TO 319 DO div8(i) = i / 8 ODRETURNPROC Gen(REC POINTER r) BYTE x0, y0, x1, y1, ATRACT=77; get new a)Y} r.ax = (r.ax + r.bx) ! r.bx r.ay = (r.ay + r.by) ! r.by r.cnt ==- 1 IF r.cnt=0 THEN ; get new b r.bx = (r.bx + r)Z}.cx) ! r.cx r.by = (r.by + r.cy) ! r.cy r.cnt = period ATRACT = 0 ; turn off attact mode FI x0 = r.ax RSH 9)[} y0 = r.ay RSH 9 IF x0<=y0 AND y0<96 THEN x1 = 191 - x0 y1 = 191 - y0 Plot(x0+64, y0):Plot(x0+64, y1) Plot)\}(y0+64, x0):Plot(y0+64, x1) Plot(x1+64, y0):Plot(x1+64, y1) Plot(y1+64, x0):Plot(y1+64, x1) FIRETURNPROC Kal() )]} CHAR CH=764 Init(); change for different patterns: persistence = 2500 period = 10000 p.cnt = period p.ax= 5221 )^}p.bx=64449 p.cx=3 p.ay=57669 p.by=64489 p.cy=3; copy plot record to erase record MoveBlock(e, p, REC); handle pers)_}istence color = 1 FOR npts = 1 TO persistence DO Gen(p) UNTIL CH#255 OD; draw patterns until key drepressed WHI)`}LE CH=255 DO color = 1 Gen(p) color = 0 Gen(e) OD; ignore key and restore screen CH = 255 : Graphics(0)RET)a}URN=255 DO color = 1 Gen(p) color = 0 Gen(e) OD; ignore key and restore screen CH = 255 : Graphics(0)RET( ..@@ D:FILEEM1.DAT@..@@ D:FILEEM2.DAT(-c}@2..@@ D:FILEEM3.DAT<@F..@@ D:FILEEM4.DATP@-d}Z..@@ D:FILEEM5.DATd@n..@@ D:FILEEM6.DATx@-e}..@@ D:FILEEM7.DAT@..@@ D:FILEEM8.DAT@-f}D2:FILEMAKR.BAS D:FILEEM7.DAT@..@@ D:FILEEM8.DAT@,()\qTPDMPRBZAZNCKKLTCCL1q}=BXYMATCH BASBVECTOR1 BASBVECTOR2 BASBJDOS SYSB_FOLLOW1 BASBdFOLLOW2 BASBkFOLLOW3 BASB$sHBUG BASB{HBUG ASMB?MUNCHIN BASBQKAL2 ACTBbFILEMAKRBASB$gFILEEM BAS  ""**********************1r}******""* FILE 'EM *""* BY *(""* NORMAN HILL *2""***********1s}*****************<{];@%,;@,;@,;@,;@,;@,;@,;@,q6. D:FILEEM1t}0.DAT{+@P+ @+ @ DO YOU WISH TOZ+ @+ @ 1 Šd% @% @1u} orn. @. @ 2 x; @ @; @TYPE NUMBER REQUIRED1v}@@K.)@. @I)!@PA@"@""@PA@7 +4 "PLACE 1w}'ͮ' DISK 1N DRIVE 17  PRESS WHEN READY"@PA >:A%,CLEAR SCREEN1x}-----------------ENTER INFORMATION-----------------"" CHECK EACH ENTRY CAREFULLY  PRESSING 1y}+' PUBLICATION (MAX 10 CHARACTERS)+ DATE$ TITLE(MAX 25 CHARACTERS)$  PAGE NUMBER1z}" +@, @ LANGUAGES6I @$ @ / @I @ 2 microsoft@H @1{}( @ 3 @H @ 4 LISPJE @$ @ 5 / @E @ 1|}6 pilotTo @% @ 0 @N @ 8 BASIC & ASSEMY @o @ ^" 1}}ENTER LANGUAGE NUMBER"r+ +@+(@ TYPE OF ARTICLE|P @+ @ ˠ6 @1~}P @ 2 educationJ @# @ . @J @ 4 INFORMATIONM @% @1} 0 @M @ 6 home utilityO @. @ 9 @O @ 8 1}OTHER(ENTER TYPE NUMBER"@PA0467@ <@ ,.=:,4@@ !+!0@1}@@  KEYWORDS &  1 ADVENTURE 2 ARCADE0  3 CLOCK 4 COMPILERS:  5 CONSOLE 1}6 DISKD!!  7 FINANCES 8 GRAPHICSN  9 GRAPHS 10 G.T.I.A.X''  11 HARDWARE12 HOME UTILITIESb  13 JOYST1}ICK 14 MEMORYl  15 PADDLE 16 PL/MISSv""  17 PLAYFIELD 18 PLOTTERS  19 PRINTER20 SOUND""  21 SIMULA1}TION 22 STRINGS 23 TAPE24 VOICE  25 WORD-PROC.26 O/S  27 REGISTERS28 MODEM 29301} 3132 OTHER) # ENTER 2 KEYWORD NUMBERS)+"@PA -------------PRINT TO DISK1}-------------O(@(@*(@O(@,,,,@ !(!(ANY1} MORE ENTRIES(Y/N)4YA *--------------4TYPE OF OUTPUT>--------------H+  DO Y1}OU WANTR6   (1)DISPLAY"  OR3  (2)PRINTOUT6 \ TYPE NUMBER REQUIREDf@@Kp.)1}@. @I)!@PAz6-&@H@ A`467@ <@ ,.=:,4@@1}"@A-------------------HEADINGS TO PRINTER-------------------  IS PRINT1}ER ON?' # PRESS WHEN READY'$ >:A%,.<<34 PUBLICATION DATE PAGE TITLE8<1}<34 ----------- ---- ---- -----B A@L------------------------VGET INFOMATION FROM 1}DISK`------------------------j?@@*@?@t")"@ A`1}~ A0")"@A A0"@2)")"A A0"@2)")"A 1} A0"@A---------------PRINT TO SCREEN--------------- PAGE  1} A0 ----------------PRINT TO PRINTER----------------(0303    1}2 A0<@F---------------------PFORMAT PRINTER OUTPUTZ---------------------d6. 1} n 6-B:,x3 @367%@,.7@<@&, 6-B:,3 @367%@,.7@<@1}&, 6.=:,67@&B:,,.6.7@<@, A  D2:FILEEM.BAS@,.7@<@0h